""" 
Sampling 讲解
MCP 还为我们提供了一个 Sampling 的功能，
这个如果从字面来理解会让人摸不到头脑，
但实际上这个功能就给了我们一个在执行工具的前后的接口，
我们可以在工具执行前后来执行一些操作。
比如，当调用本地文件的删除的工具的时候，
肯定是期望我们确认后再进行删除。那么，此时就可以使用这个功能。 
"""
# 服务端
from mcp.server import FastMCP
from mcp.types import SamplingMessage, TextContent

app = FastMCP('file_server')


@app.tool()
async def delete_file(file_path: str):
    # 创建 SamplingMessage 用于触发 sampling callback 函数
    result = await app.get_context().session.create_message(
        messages=[
            SamplingMessage(
                role='user', content=TextContent(
                    type='text', text=f'是否要删除文件: {file_path} (Y)')
            )
        ],
        max_tokens=100
    )

    # 获取到 sampling callback 函数的返回值，并根据返回值进行处理
    if result.content.text == 'Y':
        return f'文件 {file_path} 已被删除！！'


if __name__ == '__main__':
    app.run(transport='stdio')
